/**
 * 事件管理类
 */
export class EventManager {
    // 事件映射
    private eventMap: Record<string, string> = {
        'up': 'slideup',
        'down': 'slidedown',
        'left': 'slideleft',
        'right': 'slideright',
        'start': 'slidestart',
        'ing': 'sliding'
    };

    private node: cc.Node;

    constructor(node: cc.Node) {
        this.node = node;
    }

    /**
     * 绑定事件的通用方法
     * @param eventName 事件名称
     * @param callback 回调函数
     * @param target 目标
     * @returns 是否绑定成功
     */
    bindEvent(eventName: string, callback: Function, target: Object): boolean {
        if (typeof callback !== 'function' || !target || !eventName || !this.node) {
            return false;
        }

        // 使用once模式避免重复绑定
        this.node.off(eventName, callback, target);
        this.node.on(eventName, callback, target);
        return true;
    }

    /**
     * 获取事件映射
     * @param direction 方向
     * @returns 事件名称
     */
    getEventName(direction: string): string {
        return this.eventMap[direction.toLowerCase()];
    }
}